import { reqGetBaseInfo, reqGetProfile, reqLogin } from '@/api/user'
import { getToken, setToken, removeToken } from '@/utils/auth'
import { resetRouter } from '@/router'

const state = {
  token: getToken() || '',
  userInfo: {}
}
// 同步的修改
const mutations = {
  setTokenInfo(state, newToken) {
    // 存储在vuex中 => 这个信息如果说要在很多地方用 => vuex中
    state.token = newToken
    // 同时本地存储  cookie => 安全 / 移动端禁用+难用(js-cookie)
    setToken(newToken)
  },

  setUserInfo(state, newUserInfo) {
    state.userInfo = newUserInfo
  },

  // 清除vuex以及cookies中的token
  removeToken(state) {
    state.token = ''
    removeToken()
  },

  // 将来退出时, 清除用户信息
  removeUserInfo(state) {
    state.userInfo = {}
  }
}
// 封装异步的操作 => 请求是异步的  => 封装action中
const actions = {

  // const res = login()

  async login(context, data) {
    const res = await reqLogin(data)
    const token = res.data
    context.commit('setTokenInfo', token)
    return res
  },

  async getUserInfo(context) {
    // 获取用户基本资料(不含头像)
    const { data: data1 } = await reqGetProfile()
    const { data: data2 } = await reqGetBaseInfo(data1.userId)
    // console.log(data2, 444)
    // const { data } = res
    const resultObj = {
      ...data1,
      ...data2
    }
    context.commit('setUserInfo', resultObj)
    // async函数内部 return 结果 相当于 resolve(结果)
    return resultObj
  },

  logout(context) {
    context.commit('removeToken')
    context.commit('removeUserInfo')
    // 重置路由
    resetRouter()
    context.commit('permission/setRoutes', [], {
      root: true
    })
    // 清除主题色信息
    context.commit('settings/resetTheme', null, { root: true })
  }

}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
